Development of computer applications usually involves evaluating potential security issues before application code is made available to customers. Static code analyzers have been used to check for these security issues. Static code checkers check that coding standards are upheld, and mark code that is potentially harmful and thus likely to be more error prone. Harmful code may be an unprotected sequence of code leading to program vulnerabilities. A Static Code Analyzer can help developers detect coding and security related issues earlier in the development cycle thereby reducing the overall cost of fixing code defects.
Many computer-implemented applications require access to external resources (e.g. data files, access to the Internet) in order to execute properly. Evidence from the application (e.g., code characteristics) presented at runtime can determine which security policy should control the application's access to external resources and other security related issues. The evidence is based either on the code identity, such as code characteristics including among other things, digital signature, application directory, hash, publisher, site of origin, URL of origin, zone of origin, and/or with custom supplied evidences. Once a security policy is selected, a security manager can enforce the policy when executing the application.
Current implementations are ineffective because static code analyzers easily overestimate the required permissions for access to external resources (e.g., shared code between applications) because they consider the whole application (e.g., one time initialization, administrative options) and not the parts that are really being executed by the end user. Thus static analyzers are not able to identify the best security policy target for an application. Inaccurate security permissions may result in application code unnecessarily being allowed permissions and access to secure resources (e.g., granting too much permission). This is especially a concern when many applications run in highly secure environments, where the permissions should be as minimal as possible. There exists a need for limiting software application permissions more accurately and effectively.